package org.infodavid.common.model.components;

import org.infodavid.common.model.IUser;
import org.infodavid.common.model.IUserGroup;
import org.infodavid.common.persistence.IBasicDataObject;

/**
 * The Interface IOwnerDetails.
 */
public interface IOwnerDetails extends IBasicDataObject {

  /** The USER. */
  String USER = "user";

  /** The GROUP. */
  String GROUP = "group";

  /** The VISIBILITY. */
  String VISIBILITY = "visibility";

  /** The OWNER_DETAILS property. */
  String OWNER_DETAILS = "ownerDetails";

  /**
   * The Enum EVisibility.
   */
  enum EVisibility {

    /** The PRIVATE. */
    PRIVATE,
    /** The PUBLIC. */
    PUBLIC,
    /** The GROUP. */
    @SuppressWarnings("hiding")
    GROUP,
    /** The user connections. */
    USER_CONNECTIONS
  }

  /**
   * Gets the owner.
   * @return the owner
   */
  IUser getUser();

  /**
   * Gets the group.
   * @return the group
   */
  IUserGroup getGroup();

  /**
   * Sets the owner.
   * @param value the new owner
   */
  void setUser(IUser value);

  /**
   * Sets the group.
   * @param value the new group
   */
  void setGroup(IUserGroup value);

  /**
   * Gets the visibility.
   * @return the visibility
   */
  EVisibility getVisibility();

  /**
   * Sets the visibility.
   * @param value the new visibility
   */
  void setVisibility(EVisibility value);
}
